// 6. 上下文：订单
/// <summary>
/// 订单上下文类（状态模式中的Context）
/// 维护一个当前状态对象的引用，并将操作委托给当前状态对象处理
/// </summary>
public class OrderContext
{
  /// <summary>
  /// 当前订单状态
  /// </summary>
  public OrderState State { get; private set; }

  /// <summary>
  /// 构造函数
  /// 初始化订单状态为待支付状态
  /// </summary>
  public OrderContext()
  {
    State = new PendingState(this); // 初始状态
  }

  /// <summary>
  /// 设置新的订单状态
  /// 执行状态转换并显示状态变化
  /// </summary>
  /// <param name="state">新的状态对象</param>
  public void SetState(OrderState state)
  {
    State = state;
    Console.WriteLine($"当前状态: {state.GetType().Name}");
  }

  // 对外统一接口
  /// <summary>
  /// 支付操作 - 委托给当前状态处理
  /// </summary>
  public void Pay() => State.Pay();
  
  /// <summary>
  /// 发货操作 - 委托给当前状态处理
  /// </summary>
  public void Ship() => State.Ship();
  
  /// <summary>
  /// 完成操作 - 委托给当前状态处理
  /// </summary>
  public void Complete() => State.Complete();
  
  /// <summary>
  /// 取消操作 - 委托给当前状态处理
  /// </summary>
  public void Cancel() => State.Cancel();
}